const { OPERATION_IS_NOT_ALLOW } = require("../config/error");
const permissionService = require("../service/permission.service");

// 验证登录用户是否有操作moment的权限
// const verifyPermissions = async (ctx, next) => {
//   // 1、获取动态的id以及用户的id
//   const { momentId } = ctx.params;
//   const { id } = ctx.user;

//   // 2、查询user的id是否有修改momentId的权限 -- 查看是否有这条数据
//   const isPermission = await permissionService.queryPermissions(momentId, id);
//   if (isPermission) {
//     await next();
//   } else {
//     return ctx.app.emit("error", OPERATION_IS_NOT_ALLOW, ctx);
//   }
// };

// 将上面的进行改造，封装一个可以检验任何表的函数
/**
 *
 * @param {传入表名} resouce
 * @returns 一个中间件
 */
const verifyPermissions = function (resouce) {
  return async (ctx, next) => {
    // 1、获取动态的id以及用户的id
    const { momentId } = ctx.params;
    const { id } = ctx.user;

    // 2、查询user的id是否有修改resouce的权限 -- 查看是否有这条数据
    const isPermission = await permissionService.queryPermissions(
      resouce,
      momentId,
      id
    );
    if (!isPermission) {
      return ctx.app.emit("error", OPERATION_IS_NOT_ALLOW, ctx);
    }

    // 3、执行下一个中间件
    await next();
  };
};

module.exports = { verifyPermissions };
